Skip to content

Latest commit

 

History

History
734 lines (510 loc) · 19 KB

EjerciciosPracticos.md

File metadata and controls

734 lines (510 loc) · 19 KB

Ejercicios Prácticos

1.Primero y último: Crea una función que dada un string, remueva el primer y último caracter.

Ejemplo:

remuevePrimerYUltimoCaracter('hola') // "ol"
Solución:

    const remuevePrimerYUltimoCaracter = (str) => str.slice(1, -1)

Fuente aquí

2.Encuentra el más pequeño: Dado un array de números, haz que la función devuelva el más pequeño entre ellos.

Ejemplo:

const arr = [ 33, 2, 12, 65 ]
encuentraElMasPequeño(arr) // 2
Solución:

    const encuentraElMasPequeño = (arr) =>  Math.min.apply(null, arr)

💡 Nota: Math.min no acepta matrices, por lo que se le debe agregar apply. El primer argumento de apply hace referencia al this dentro de esa función. Pero como en este caso no es necesario usarlo, se puede pasar null o undefined y actuará igual.

Fuente aquí

3.Sumando: Escribe una función que encuentre el resultado de sumar cada número del 1 al parámetro dado.

Ejemplo:

sumando(2) -> 3
1 + 2
Solución:

    const sumando = (num) =>  {
        let result = 0;
        for (let i = 1; i <= num; i++) result += i;
        return result;
    }

Fuente aquí

4.Siglo: Escribe una función que devuelva el siglo del año dado.

Ejemplo:

sigloDeAño(1900)  returns (19)
Solución 1:

   function sigloDeAño(año) {
       const siglo = año / 100

       if (año % 100  === 0) {
           return siglo
       }

       return Math.floor(siglo)+ 1
   }

Solución 2:

   const sigloDeAño = año =>  Math.ceil(año/100)

💡 Nota: Math.ceil lo que hace es redondear el número dado, luego lo dividimos entre 100 para que nos de el siglo

Fuente aquí

5.Contando ovejas: Dado un array, escribe un programa que devuelva el número de ovejas presentes (true).

Ejemplo:

[true,  true,  true,  false,
true,  true,  true,  true ,
true,  false, true,  false,
true,  false, false, true ,
true,  true,  true,  true ,
false, false, true,  true]
Solución:

   const contandoOvejas = rebaño => rebaño.filter(Boolean).length

💡 Nota: Usamos la palabra Boolean para preguntar si es un true, el filter nos devuelve un array nuevo excluyendo los false y finalmente .length para saber la cantidad de ovejas presentes.

Fuente aquí

6.Operaiones simples: Crea una función que acepte dos valores y un símbolo para ejecutar las operaciones matemáticas básicas.

Ejemplo:

operacionBasica('*', 5, 5) //  25
Solución 1:

    const operacionBasica = (operacion, valor1, valor2) => {
        switch (operacion) {
            case '+':
            return valor1 + valor2
             break;
            case '-':
            return valor1 - valor2
             break;
            case '*':
            return valor1 * valor2
             break;
            case '/':
            return valor1 / valor2
             break;
            default: return valor1 + valor2
        }
    }

Solución 2:

    const operacionBasica = (operacion, valor1, valor2) => eval(valor1+operacion+valor2)

La función eval evalúa un string y lo ejecuta.

Fuente aquí

  1. Es divisible: Crea una función que chequee si un número es divisible entre los parametro x, y dados.

Ejemplo:

n =  12, x = 2, y = 6 =>  true // porque  12 es divisible entre 2 y 6
Solución:

    const esDivisible = ( num, x, y ) => ( num % x === 0 && num % y === 0 )

Fuente aquí

8.Par o impar: Crea una función devuelva si un número es par o impar

Ejemplo:

 parOimpar(3) //Impar
Solución:

    const parOimpar = num => ( num % 2 === 0 ) ? 'Par' : 'Impar'

Fuente aquí

  1. Palabras reversas: Implementa una función que acepte un string como parámetro y devuelva todas las palabras del string en reverso, respetando los espacios.

Ejemplo:

 "¡Esto es un ejemplo!" ==> "¡otsE se nu !olpmeje"
Solución:

    const invertirPalabras = str => {
        return str.split(' ').map(word => word.split('').reverse().join('')).join(' ')
    }

Fuente aquí

  1. FizzBuzz: Escribe un programa imprima todos los números del 1 a 100, con dos excepciones. Para números divisibles por 3, imprima "Fizz" en lugar del número, y para los números divisibles entre 5 (y no 3), imprima "Buzz" en su lugar. Cuando lo tengas funcionando, modifica tu programa para imprimir "FizzBuzz", para los números que son divisibles entre 3 y 5
Solución 1:

    const FizzBuzz = () => {
        for (i = 1; i <= 100; i++) {
            let mensaje = ''
            if(i % 3 === 0 && i % 5 === 0) {
                mensaje = 'FizzBuzz'
            } else if (i % 3 === 0) {
                mensaje = 'Fizz'
            } else if (i % 5 === 0) {
                mensaje = 'Buzz'
            } else {
               mensaje = i
            }
            console.log(mensaje)
        }
    }

Solución 2:

const FizzBuzz = () => { for (i = 1; i <= 100; i++) { let mensaje = '' switch (true) { case (i % 3 === 0 && i % 5 === 0): mensaje = 'FizzBuzz' break;

                case (i % 3 === 0):
                mensaje = 'Fizz'
                break;

                case (i % 5 === 0):
                mensaje = 'Buzz'
                break;

                default:
                mensaje = i
            }
            console.log(mensaje)
        }
    }

Solución 3:

    const isMultiple = (num, mod) => num % mod === 0

    const FizzBuzz = () => {
        for (i = 1; i <= 100; i++) {
            let mensaje = ''
            switch (true) {
                case isMultiple(i, 15):
                mensaje = 'FizzBuzz'
                break;

                case isMultiple(i, 3):
                mensaje = 'Fizz'
                break;

                case isMultiple(i, 5):
                mensaje = 'Buzz'
                break;

                default:
                mensaje = i
            }
            console.log(mensaje)
        }
    }

Esta es la opción más mantenible, ya que permite que puedas agregar más posibles casos en un futuro.

Fuente aquí

  1. Suma de múltiplos: Crea una función devuelva las suma de todos los múltiplos de 3 y 5, contando desde el parámetro dado

Ejemplo:

findSum(5) // 8 (3 + 5)
Solución 1:

    const findSum = (n) => {
        let result = 0
        for (let i = 0; i <= n; i++) {
            if (i % 3 === 0 || i % 5 === 0) {
            result = result + i
            }
        }
        return result
    }

Solución 2:

    const isMultiple = (num, mod) => num % mod === 0

    const findSum = (n) => {
        let result = 0
        for (let i = 0; i <= n; i++) {
            switch (true) {
            case isMultiple(i, 3):
                result = result + i
                break;
            case isMultiple(i, 5):
                result = result + i
                break;
            default: result = result
            }
        }
        return result
    }

Más mantenible a largo plazo porque podemos agregar más casos en un futuro de manera mas fácil.

Fuente aquí

  1. Duplicado: Dado un array, crea una función que devuelva el mismo duplicado.

Ejemplo:

 duplica([1,2,3,4,5]); // [1,2,3,4,5,1,2,3,4,5]
Solución:

     const duplica = arr => {
        result = arr
        arr.map( item => {{
            result.push(item)
        }})
        return result
    }

Fuente aquí

  1. Variable global accidental: ¿Cuál es el resultado de typeof a y typeof b de acuerdo con el siguiente código?

Código:

 function foo() {
    let a = b = 0;
    a++;
    return a;
}

foo();
typeof a; // => ???
typeof b; // => ???
Solución:

     typeof a;        // => 'undefined'
     typeof window.b; // => 'number'
  • let a = b = 0 declara una variable local a, pero también una global con b.

  • Como no hemos declarado explicitamente la variable b, JavaScript lo interpreta b = 0 como window.b = 0, por lo que su scope es global.

  • Como resultado esto es lo que se interpreta:

      ```
      function foo() {
          let a;
          window.b = 0;
          a = window.b;
          a++;
          return a;
      }
     ```
    
  • Por lo tanto, typeof a es undefined. a existe dentro del scope de foo() y no esta disponible fuera de ella. En cambio b, al ser una variable global, devuelve 'number'.

Fuente aquí

  1. Array length: Cual es el valor de ropa[0]:

Código:

const ropa = ['chaqueta', 'camiseta'];
ropa.length = 0;

ropa[0]; // => ???
Solución:

ropa[0] es igual a `undefined` ya que cuando se ejecuta `ropa.length = 0` se eliminan todos los elementos del array.

Fuente aquí

  1. Ojo de águila: Cuál es el contenido de numbers:

Código:

const length = 4;
const numbers = [];
for (var i = 0; i < length; i++);{
    numbers.push(i + 1);
}

numbers; // => ???
Solución:

El `;` que va después de `for (var i = 0; i < length; i++)` provoca que el for loop sea nulo, por lo que no se ejecuta `numbers.push(i + 1);`

    const length = 4;
    const numbers = [];
    var i;
    for (i = 0; i < length; i++) {
         // does nothing
    }
    {
        // a simple block
        numbers.push(i + 1);
    }

    numbers; // => [5]

Lo que en realidad sucede es que i aumenta 4 veces y luego se pasa a la parte del código en donde se agrega al array de numbers, resultando en 5.

Fuente aquí

  1. Semicoma automática: ¿Qué devuelve esta función?:

Código:

function arrayFromValue(item) {
    return
        [item];
}

arrayFromValue(10); // => ???
Solución:

La función devuelve `undefined` porque `[item];`esta en la siguiente línea, por lo que JavaScript entiende:

function arrayFromValue(item) {
    return;
    [item];
}

arrayFromValue(10); // => undefined

Fuente aquí

  1. Pangrama: Un pangrama es una oración que contiene cada letra del alfabeto al menos una vez. Por ejemplo, la oración "El zorro marrón rápido salta sobre el perro perezoso" es un pangrama, porque usa las letras A-Z al menos una vez (el caso es irrelevante).

Dada una cadena, detecta si es o no un pangrama. Devuelve True si es así, False si no. Ignorar números y puntuación.

Solución 1:

    function isPangram(string){
       const alphabeth = ('abcdefghijklmnopqrstuvwxyz').split('')
       return alphabeth.every(x => string.toLowerCase().includes(x))
    }

Solución 2:

    const abc = 'abcdefghijklmnopqrstuvwxyz'

    const isPangram = (string) => {
        const processedString = [...new Set(string.toLowerCase().split(' ').join(''))].sort().join('')
        console.log(abc===processedString)
    }

Fuente aquí

  1. esPrimo - Crea una función que devuelva trueo false dependiendo del número que pases como parámetro. Ejemplo:

    esPrimo(0)                          // false
    esPrimo(1)                          // false
    esPrimo(17)                         // true
    esPrimo(10000000000000)             // false
    
Solución:

     const esPrimo = (num) => {
       for (let i = 2; i < num; i++) {
           if (num % i === 0) {
           return false; 
        }
        return true;
    }  

  1. Producto de elementos adyacentes - Crea una función que devuelva el mayor producto de dos elementos adyacentes en el array dado. Ejemplo:

    inputArray = [3, 6, -2, -5, 7, 3]
    adjacentElementsProduct(inputArray) = 21
    //7 y 3 producen el producto más mayor.
    
Solución:

     function adjacentElementsProduct(arr) {
       return Math.max( ...arr.slice(1).map(( x, i ) => [ x * arr[i]]))
    } 

  1. Letra repetida - Encuentra la primera letra que se repita dado una cadena de texto, si no se repite ninguna devuelve -1:

    firstRepeat("Gandalf") ➞ "a"
    
Solución:

     function firstRepeat(str) {
        for (i = 1; i < str.length; i++) {
            if (str.slice(0,i).includes(str[i])) {
                return str[i]
            }
        }
        return '-1'
    }

Fuente aquí

  1. Número de caractéres - Dada una cadena de texto (s) y una letra (c), devuelde el número de veces que aparece c en s.

     numberOfCharacters(‘oh heavens’, ‘h’)
     2
    
Solución:

     function numberOfCharacters(s, c) {
        let counter = 0
        const character = c.toLowerCase()
        const str = s.trim().toLowerCase().split('')
        str.forEach( x => x === character ? ++counter : counter )
        return counter
    }

    numberOfCharacters('woaw', 'W') // 2

Fuente aquí

  1. Llamada a API - Haz una llamada a la API y obten información de los usuarios. Implementa una función que devuelve solo los nombres y emails de los usuarios que tengan una men su nombre.

     consolo.log(getUsers('https://jsonplaceholder.typicode.com/users'))
     //[{name: Maria, email: [email protected]}, {name: Jaime, email: [email protected]}]
    
Solución:

    const getUsers = async () => {
        const response = await fetch('https://jsonplaceholder.typicode.com/users')
        const users = await response.json()

        const result = users.filter( user => user.name.toLowerCase().includes('m')).map( user => ({ name: user.name, email: user.email }))

        return result

    }

  1. Isograma - Dada una palabra, chequea si es un isograma o no.

Un isograma es una palabra en la que no se repiten letras.

    isIsogram('hilo')// true
Solución:

    const isIsogram = (str) => {
       const lowerCased = str.toLowerCase()
       const result = lowerCased.split('').every((letter, i) => {
           lowerCased.indexOf(letter) === i
        })

        return result
    }

Fuente aquí

24.Año bisiesto - Crea una función que, dado un año, devuelva si este es bisiesto o no.

Los años bisiestos ocurren cada cuatro años (aquellos divisibles entre cuatro), exeptuando los cientos a menos de que sea divisible entre 400

    isLeapYear('2020')// true
Solución:

    const isLeapYear = (year) => {
      const yearInNumber = Number(year)
      return yearInNumber % 100 === 0 ? yearInNumber % 400 === 0 : yearInNumber % 4 === 0
    }

25.*Encode/Decode** - Crea una función encode que tome un string como parámetro e implemente el patrón 'Run-length'.

El patrón Run-length toma los elementos consecutivos y los reemplaza por el valor seguido del número de veces que aparece.

    encode('hhqqq')// h2q3
Solución:

    const encode = (string) => {
        return string.replace(/(\w)\1+/g, (m,v) => `${m.length}${v}`)
    }

    const decode = (string) => {
        return string.replace(/(\d+)(\w)/g, (x,y,z) => z.repeat(y))
    }

26.*Elimina duplicados** - Dado un array, implementa una función que remueva los elementos duplicados usando array.reduce()

    removeDuplicates(['perro', 'perro', 'gato']) // ['perro', 'gato']
Solución:

    const encode = (arr) => {
        return arr.reduce(( accumulator, value ) => {
            return accumulator.includes(value) ? accumulator : [ ...accumulator, value ]
        }, [])
    }